home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turnbull China Bikeride
/
Turnbull China Bikeride - Disc 2.iso
/
STUTTGART
/
FROMUTS
/
UNIXLIB37B
/
src
/
c
/
strtol
< prev
next >
Wrap
Text File
|
1990-09-26
|
2KB
|
129 lines
#ifdef __STDC__
static char sccs_id[] = "@(#) strtol.c 1.3 "__DATE__" HJR";
#else
static char sccs_id[] = "@(#) strtol.c 1.3 26/9/90 HJR";
#endif
/* strtol.c (c) Copyright 1990 H.Rogers */
#include <ctype.h>
#ifdef __STDC__
#include <stdlib.h>
#else
extern int atoi();
extern long atol();
extern long strtol();
extern unsigned long strtoul();
#endif
#ifdef __STDC__
int (atoi)(register const char *s)
#else
int (atoi)(s)
register const char *s;
#endif
{
return(atoi(s));
}
#ifdef __STDC__
long (atol)(register const char *s)
#else
long (atol)(s)
register const char *s;
#endif
{
return(atol(s));
}
#define digit(x) (((x) > '9') ? (((x) & 31) + 9) : ((x) - '0'))
#ifdef __STDC__
long strtol(register const char *s,char **end,register int b)
#else
long strtol(s,end,b)
register const char *s;
char **end;
register int b;
#endif
{
register long r = 0L;
register int r_ = 0,d;
if (!s) return(r);
while (isspace(*s)) s++;
if (*s == '+' || *s == '-')
{
if (*s == '-') r_ = 1;
s++;
}
if (!b)
{
if (*s == '0')
{
s++;
b = 010;
if (*s == 'x') { s++; b = 0x10; }
}
else
b = 10;
}
else
if (b == 16)
if (*s == '0' && *++s == 'x') s++;
while (d = digit(*s),d >= 0 && d < b)
{
r = r * (long)b + (long)d;
s++;
}
if (end) *end = (char *)s;
return(r_ ? -r : r);
}
#ifdef __STDC__
unsigned long strtoul(register const char *s,char **end,register int b)
#else
unsigned long strtoul(s,end,b)
register const char *s;
char **end;
register int b;
#endif
{
register unsigned long r = 0;
register int d;
if (!s) return(r);
while (isspace(*s)) s++;
if (!b)
{
if (*s == '0')
{
s++;
b = 010;
if (*s == 'x') { s++; b = 0x10; }
}
else
b = 10;
}
else
if (b == 16)
if (*s == '0' && *++s == 'x') s++;
while (d = digit(*s),d >= 0 && d < b)
{
r = r * (unsigned long)b + (unsigned long)d;
s++;
}
if (end) *end = (char *)s;
return(r);
}